#ifndef _PARSER_H_
#define _PARSER_H_
#include <vector>
#include <string>
using namespace std;


class Net;

class Gate{
    public: 
           Gate(string tname,int tid=0):name(tname),id(tid),visit(0){}
           void addoutputname (string t){ outputname=t; }
           void addinputname (string t){ inputname.push_back(t); }
           void setoutput(Gate* t){  output.push_back(t); }
           void setinput(Gate* t){  input.push_back(t); }
           void setid(int t){ id=t; }
           
           string getname(){ return name; }
           int getid(){ return id;}
    
    //private:
            string name;
            bool visit;
            int id;
            int place;
            string outputname;
            vector<string> inputname;
            vector<Gate*> output;
            vector<Gate*> input;
};

class Net{
    public: 
           
           Net(){};
           void setname(string t){ name=t; }
           void setoutput(Gate* t){ output.push_back(t); }
           void setinput(Gate* t){ input.push_back(t); }
           
   // private:
           string name;
           vector<Gate*> output;
           vector<Gate*> input;
};


class parser_C
{
    public:
        parser_C() {};
        ~parser_C();
        bool parse(char*);

        void getGate(vector<Gate*>& p_gate) {p_gate = vgate;}

    private:
        vector<Gate*> vgate;
        vector<Net*> vnet;
};



#endif
